/*
 * @Descripttion: 缓存工具类
 * @version:
 * @Author: lhl
 * @Date: 2024-09-14 10:39:35
 * @LastEditors: lhl
 * @LastEditTime: 2024-09-14 10:42:15
 */
class Cache {
  private storage: Storage;

  constructor(useSessionStorage: boolean = false) {
    this.storage = useSessionStorage ? sessionStorage : localStorage;
  }

  /**
   * 设置缓存项
   * @param key 缓存键
   * @param value 缓存值
   * @param expires 过期时间（毫秒），默认不过期
   */
  set(key: string, value: any, expires: number = 0): void {
    const item = {
      value,
      expires: expires > 0 ? Date.now() + expires : 0
    };
    this.storage.setItem(key, JSON.stringify(item));
  }

  /**
   * 获取缓存项
   * @param key 缓存键
   * @returns 缓存值，如果过期或不存在则返回 null
   */
  get(key: string): any {
    const item = this.storage.getItem(key);
    if (item) {
      const parsedItem = JSON.parse(item);
      if (parsedItem.expires === 0 || parsedItem.expires > Date.now()) {
        return parsedItem.value;
      } else {
        this.remove(key); // 过期则删除缓存
      }
    }
    return null;
  }

  /**
   * 删除缓存项
   * @param key 缓存键
   */
  remove(key: string): void {
    this.storage.removeItem(key);
  }

  /**
   * 清空所有缓存
   */
  clear(): void {
    this.storage.clear();
  }
}
// localStorage
export const localStorageCache = new Cache();
// sessionStorage
export const sessionStorageCache = new Cache(true);

// 示例使用
// const localStorageCache = new Cache();
// localStorageCache.set('name', 'Alice', 1000 * 60); // 设置缓存，过期时间为 1 分钟
// console.log(localStorageCache.get('name')); // 获取缓存
// localStorageCache.remove('name'); // 删除缓存
// localStorageCache.clear(); // 清空所有缓存

// const sessionStorageCache = new Cache(true);
// sessionStorageCache.set('age', 30); // 设置缓存，默认不过期
// console.log(sessionStorageCache.get('age')); // 获取缓存
// sessionStorageCache.clear(); // 清空所有缓存
